package com.zjsru.oneDay;

import java.util.HashMap;
import java.util.Map;

/**
 * 2131. 连接两字母单词得到的最长回文串
 *
 * @Author: cookLee
 * @Date: 2025-05-25
 */
public class LongestPalindrome {

    /**
     * 主
     * \
     * 输入：words = ["lc","cl","gg"]
     * 输出：6
     * 解释：一个最长的回文串为 "lc" + "gg" + "cl" = "lcggcl" ，长度为 6 。
     * "clgglc" 是另一个可以得到的最长回文串。
     * \
     * 输入：words = ["ab","ty","yt","lc","cl","ab"]
     * 输出：8
     * 解释：最长回文串是 "ty" + "lc" + "cl" + "yt" = "tylcclyt" ，长度为 8 。
     * "lcyttycl" 是另一个可以得到的最长回文串。
     * \
     *
     * @param args args
     */
    public static void main(String[] args) {
        LongestPalindrome longestPalindrome = new LongestPalindrome();
        System.out.println(longestPalindrome.longestPalindrome(new String[]{"cc", "ll", "xx"}));
    }

    public int longestPalindrome(String[] words) {
        if (words == null) {
            return 0;
        }
        Map<String, Integer> countMap = new HashMap<>();
        for (String word : words) {
            if (word == null || word.length() != 2) {
                continue;
            }
            countMap.put(word, countMap.getOrDefault(word, 0) + 1);
        }

        int pairCount = 0;
        //判断是否存在可以作为中心单词
        boolean mid = false;
        for (Map.Entry<String, Integer> map : countMap.entrySet()) {
            String key = map.getKey();
            Integer value = map.getValue();
            String reversedKey = this.reverse(key);
            if (key.equals(reversedKey)) {
                if (value % 2 == 1) {
                    mid = true;
                }
                pairCount += value / 2 * 2;
            } else if (key.compareTo(reversedKey) > 0) {
                //按照排序取值，回文数字只会取一次
                pairCount += 2 * Math.min(countMap.getOrDefault(key, 0), countMap.getOrDefault(reversedKey, 0));
            }
        }
        if (mid) {
            pairCount++;
        }
        return pairCount * 2;
    }

    private String reverse(String s) {
        return new StringBuilder(s).reverse().toString();
    }
}
